Mybatis执行sql(insert、update、delete)返回值问题 |
您所在的位置:网站首页 › mybatis 批量更新 返回更新记录数 › Mybatis执行sql(insert、update、delete)返回值问题 |
数据库:Mysql 在使用mybatis的过程中对执行sql的返回值产生疑问,顺手记录一下。 结论: insert: 插入n条记录,返回影响行数n。(n>=1,n为0时实际为插入失败) update:更新n条记录,返回影响行数n。(n>=0) delete: 删除n条记录,返回影响行数n。(n>=0)
验证: 插入多条数据,mysql中可以使用如下sql: insert into bill (TX_TYP,REMARK,NO) VALUES (?,?,?) , (?,?,?) , (?,?,?) ;而对oracle的操作略有不同(两种方式 以及对应的mapper配置): INSERT INTO BILL(NO,TX_TYP,REMARK) (SELECT ?,?,? FROM dual) UNION ALL (SELECT ?,?,? FROM dual); --或者 INSERT ALL INTO bill(NO,TX_TYP,REMARK) values ( ?,?,? ) INTO bill(NO,TX_TYP,REMARK) values ( ?,?,? ) SELECT 1 FROM dual; insert into bill (TX_TYP,REMARK,NO) (SELECT #{bill.txTyp},#{bill.remark},#{bill.no} from dual) insert ALL into bill (TX_TYP,REMARK,NO) values (#{bill.txTyp},#{bill.remark},#{bill.no}) select 1 from dual为了更直观的查看sql运行情况,在mybatis-config.xml中配置加一个setting配置,将执行的sql打印到控制台。 定义实体类Bill,属性no,txTyp,remark,其中no为mysql数据库表bill自增主键。 Mapper接口 //单条插入 int add(Bill bill); //多条插入 int mulAdd(List list); //更新 int upt(Bill bill); //删除 int del(Bill bill);Mapper.xml insert into bill(TX_TYP,REMARK) values(#{txTyp},#{remark}) insert into bill (TX_TYP,REMARK,NO) VALUES (#{bill.txTyp},#{bill.remark},#{bill.no}) update bill set REMARK=#{remark} where NO=#{no} delete from bill where TX_TYP=#{txTyp}
开始测试: ①插入单条记录: @Test public void add(){ Bill bill=new Bill(); bill.setTxTyp("1"); bill.setRemark("试试影响行数"); System.out.println(billMapper.add(bill)); }sql执行结果与返回值:成功插入一条数据,返回影响行数:1。 ②插入多条记录 @Test //测试一次性插入多条记录 public void mulAdd(){ List list =new ArrayList(); Bill bill1=new Bill(); bill1.setTxTyp("1"); bill1.setRemark("bill1"); Bill bill2=new Bill(); bill2.setTxTyp("1"); bill2.setRemark("bill2"); Bill bill3=new Bill(); bill3.setTxTyp("1"); bill3.setRemark("bill3"); list.add(bill1); list.add(bill2); list.add(bill3); System.out.println(billMapper.mulAdd(list)); }sql执行结果与返回值:成功插入三条数据,返回影响行数:3。 插入多条记录时,如果有记录主键冲突,则sql执行出错,抛出异常,此时未成功插入记录。 ③更新语句 @Test //根据no进行更新 public void upt(){ Bill bill=new Bill(); bill.setTxTyp("1"); bill.setRemark("修改一下"); bill.setNo(1); System.out.println(billMapper.upt(bill)); }sql执行结果与返回值:根据NO字段进行更新,数据库表中没有NO=1的行,返回影响行数:0。修改成表中有的值后,成功返回影响行数。 ④删除语句 @Test //根据txTyp进行删除 public void del(){ Bill bill=new Bill(); bill.setTxTyp("1"); System.out.println(billMapper.del(bill)); }sql执行结果与返回值:先将txTyp设置成数据库中没有的值txTyp=a,执行后返回影响行数为0;设置为有4条记录的txTyp=1,执行后返回影响结果为4,成功删除4条记录。
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |